from langdev_helper.llm.lcex import llm_lcex as llm

from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

from typing import Optional

from typing_extensions import Annotated, TypedDict


# TypedDict
class Joke(TypedDict):
    """爆款选题."""

    title: Annotated[str, ..., "标题示例"]
    reason: Annotated[str, ..., "选题理由"]
    # rating: Annotated[Optional[int], None, "选题得分, from 1 to 10"]


structured_llm = llm.with_structured_output(Joke)

prompt_template = '''
你现在是一位资深的内容策划，请基于[{subject}]分析近期热点，给出{number}个爆款选题建议。要求：
1. 每个选题都要有话题度和时效性
2. 选题要符合平台推荐机制（争议性/实用性/情感共鸣）
3. 选题要自带传播属性（可讨论/可分享/可实操）
4. 给出具体标题示例和选题理由
5. 参考竞品账号的爆款内容
6. 考虑目标用户的痛点和需求
'''

prompt = PromptTemplate(
    template=prompt_template, 
    input_variables=["subject", 'number'], 
    partial_variables={"foo": "foo"}
)

chain = prompt | llm | StrOutputParser()
resp = chain.invoke({'subject': 'AI应用', 'number': 1})

# chain = prompt | structured_llm | StrOutputParser()
# resp = chain.invoke({'subject': 'AI应用', 'number': 1})

print(resp)


